package com.demo.swagger.controller;

import com.alibaba.fastjson.JSONObject;
import com.demo.swagger.entity.User;
import com.demo.swagger.mapper.UserDao;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("user")
@Api("用户信息操作接口集")
public class HelloController {

    @Autowired
    UserDao userDao;

    /**
     * @GetMapping 可以不设置参数 这里拦截的是 /user/  Get
     * @ApiOperation value 用于描述这个接口的功能，notes 用户更详细地说明用法
     * @ApiImplicatitParam 用于说明一个入参信息，paramType 描述参数存放地位置（header、query、path、body、form）
     * name 描述参数的名称     value 描述参数的含义   dataType 描述参数的基本类型
     * @ApiImplicatitParams 用于说明一组入参信息，当有多个入参时需要用这个将上一个注解包含起来
     * @ApiResponse 描述返回的信息， code 指的状态编码， message 指的具体描述， response 能返回一个实体类， 这个注解一般用于说明异常的情况
     * @ApiResponses 可以包含多个上一个注解，上一个注解单独使用时没有生效
     * @param userName
     * @return
     */
    @GetMapping
    @ApiOperation(value = "获取用户信息", notes = "根据用户名获取用户信息")
    @ApiImplicitParam(paramType = "query", name = "userName", value = "用户名", dataType = "String")
    @ApiResponses({
            @ApiResponse(code = 401, message = "没找到用户", response = Exception.class)
    })
    public User getUserInfo(@RequestParam String userName) {
        return userDao.selectByUserName(userName);
    }

    /**
     * 添加用户信息
     * @param user
     * @return
     */
    @PostMapping
    @ApiOperation(value = "添加用户", notes = "用户名、密码 必填")
    @ApiResponses({
            @ApiResponse(code = 401, message = "错误的用户", response = User.class)
    })
    public Object addUserInfo(@RequestBody @ApiParam(name = "用户对象", value = "传入json格式", required = true) User user){
        userDao.insertUser(user);
        return userDao.selects();
    }

    /**
     * 修改用户密码
     * @param userName
     * @param password
     * @return
     */
    @PutMapping
    @ApiOperation(value = "修改用户密码", notes = "输入用户名和密码")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "query", name = "userName", value = "用户名", dataType = "string"),
            @ApiImplicitParam(paramType = "query", name = "password", value = "密码", dataType = "string")
    })
    @ApiResponses({
            @ApiResponse(code = 500, message = "没有找到用户", response = User.class)
    })
    public Object updateUserPassword(@RequestParam String userName, @RequestParam String password){
        userDao.updateUserPassword(userName, password);
        return userDao.selectByUserName(userName);
    }

    /**
     * 删除指定用户
     * @param userName
     * @return
     */
    @DeleteMapping
    @ApiOperation(value = "删除用户", notes = "根据指定用户名删除用户")
    @ApiImplicitParam(paramType = "query", name = "userName", value = "用户名")
    public Object deleteUser(@RequestParam String userName){
        userDao.deleteByUserName(userName);
        return userDao.selects();
    }


}
